package com.zmm.book.keep.model;

import com.zmm.util.document.register.Param;
import com.zmm.common.valid.AddGroup;
import com.zmm.common.valid.ListValue;
import com.zmm.common.valid.UpdateGroup;
import com.zmm.common.valid.UpdateStatusGroup;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author 900045
 * @description:
 * @name Bill
 * @date By 2021-09-28 09:58:58
 */
@Data
public class Bill implements Serializable {


	private static final long serialVersionUID = 2104128407702194871L;
	
	private Integer recordId;

	/**
	 * 用户ID
	 */
	@Param(description = "customerId", required = true)
	private Integer customerId;

	/**
	 * 日期 字符串格式 yyyy-MM-dd
	 */
	@Param(description = "date", required = true)
	private String date;

	/**
	 * 方式 1:支出 2:支入3:转账
	 */
	@ListValue(message = "不属于范围内的值",values={1,2,3},groups = {AddGroup.class, UpdateStatusGroup.class})
	@Param(description = "mode", required = true)
	private Integer mode;

	/**
	 * 消费类型
	 */
	private Integer type;

	/**
	 * 金额
	 */
	@Min(value = 0)
	@NotNull(groups = {AddGroup.class, UpdateStatusGroup.class})
	@Param(description = "money", required = true)
	private BigDecimal money;


	/**
	 * 支付时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@Param(description = "payTime", required = true)
	private Date payTime;

	/**
	 * 创建时间
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@Param(description = "createTime", required = true)
	private Date createTime;

	/**
	 * 更新时间
	 */
	@Param(description = "updateTime", required = true)
	private Date updateTime;

	/**
	 * 删除标识(0:删除 ,1 未删除)
	 */
	@Param(description = "deleteFlag", required = true)
	private Integer deleteFlag;

	/**
	 * 来源
	 */
	@NotNull(message = "来源不能为空",groups = {AddGroup.class, UpdateGroup.class})
	@Param(description = "form", required = true)
	private Integer form;

	/**
	 * 去向
	 */
	@NotEmpty(message = "去向不能为空",groups = {AddGroup.class, UpdateGroup.class})
	@Param(description = "to", required = true)
	private String to;

	/**
	 * 备注
	 */
	@Param(description = "remark", required = true)
	private String remark;


	/**
	 * @Null 限制只能为null
	 * @NotNull 限制必须不为null
	 * @AssertFalse 限制必须为false
	 * @AssertTrue 限制必须为true
	 * @DecimalMax(value) 限制必须为一个不大于指定值的数字
	 * @DecimalMin(value) 限制必须为一个不小于指定值的数字
	 * @Digits(integer,fraction) 限制必须为一个小数，且整数部分的位数不能超过integer，小数部分的位数不能超过fraction
	 * @Future 限制必须是一个将来的日期
	 * @Max(value) 限制必须为一个不大于指定值的数字
	 * @Min(value) 限制必须为一个不小于指定值的数字
	 * @Past 限制必须是一个过去的日期
	 * @Pattern(value) 限制必须符合指定的正则表达式
	 * @Size(max,min) 限制字符长度必须在min到max之间
	 * @Past 验证注解的元素值（日期类型）比当前时间早
	 * @NotEmpty 验证注解的元素值不为null且不为空（字符串长度不为0、集合大小不为0）
	 * @NotBlank 验证注解的元素值不为空（不为null、去除首位空格后长度为0），不同于
	 * @Email 验证注解的元素值是Email，也可以通过正则表达式和flag指定自定义的email格式
	 */
}
